1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-12-23 04:23:08 +00:00

Add pocl.

Portable OpenCL aims to be an efficient open source (MIT-licensed)
implementation of the OpenCL 1.2 standard. pocl uses Clang as an
OpenCL C frontend and LLVM for the kernel compiler implementation,
and as a portability layer. Thus, if your desired target has an LLVM
backend, it should be able to get OpenCL support easily by using pocl.

PR:		171914
Submitted by:	O.Hartmann <ohartmann@walstatt.org> (based on)
This commit is contained in:
Koop Mast 2016-11-21 14:36:51 +00:00
parent 39c0f174f4
commit 1e36af0daa
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=426722
9 changed files with 268 additions and 0 deletions

View File

@ -256,6 +256,7 @@
SUBDIR += php_doc
SUBDIR += picoc
SUBDIR += pike78
SUBDIR += pocl
SUBDIR += polyml
SUBDIR += ptoc
SUBDIR += pure

67
lang/pocl/Makefile Normal file
View File

@ -0,0 +1,67 @@
# $FreeBSD$
PORTNAME= pocl
PORTVERSION= 0.13
CATEGORIES= lang
MASTER_SITES= SF/pocl \
http://portablecl.org/downloads/
MAINTAINER= ohartman@zedat.fu-berlin.de
COMMENT= POrtable Computing Language (POCL)
LICENSE= GPLv3
LICENSE_FILE= ${WRKSRC}/LICENSE
BUILD_DEPENDS= llvm${LLVM_VERSION}>=0:devel/llvm${LLVM_VERSION} \
opencl>=2.1:devel/opencl
LIB_DEPENDS= libhwloc.so:devel/hwloc \
libOpenCL.so:devel/ocl-icd \
libltdl.so:devel/libltdl
RUN_DEPENDS= llvm${LLVM_VERSION}>=0:devel/llvm${LLVM_VERSION}
CONFLICTS= freeocl[0-9]*
BROKEN_FreeBSD_9= pocl is not supported on 9.x
BROKEN_FreeBSD_10= pocl is not supported on 10.x
ONLY_FOR_ARCHS= amd64
ONLY_FOR_ARCHS_REASON_amd64= only tested on amd64
LLVM_VERSION= 37
GNU_CONFIGURE= yes
USE_LDCONFIG= yes
USE_GL= yes
#USES= autoreconf gmake localbase pathfix pkgconfig libtool
USES= gmake localbase ncurses pathfix pkgconfig libtool:keepla
INSTALL_TARGET= install-strip
MAKE_ARGS+= PKGCONFIGDIR=${PREFIX}/libdata/pkgconfig
CONFIGURE_ENV= LLVM_CONFIG="${LOCALBASE}/llvm${LLVM_VERSION}/bin/llvm-config" \
CLANGXX_FLAGS=-std=gnu++11
#CONFIGURE_ARGS+= --enable-pedantic
# needed for the libltdl configure check
LDFLAGS+= -L${LOCALBASE}/lib
ALL_TARGET= all
OCL_ICD_VENDORS?= ${PREFIX}/etc/OpenCL/vendors
OPTIONS_DEFINE= DEBUG
OPTIONS_GROUP= TEST
OPTIONS_GROUP_TEST= OCLBOOK
OCLBOOK_DESC= Tests from the OpenCL book
DEBUG_DESC= Debug build of pocl
OCLBOOK_CONFIGURE_ENABLE= enable_testsuites="opencl-book-samples,cloverleaf,opencl_book_samples,halide,vexcl"
OCLBOOK_ALL_TARGET= check
DEBUG_CONFIGURE_ENABLE= debug
do-test:
cd ${WRKSRC} && ${GMAKE} check
.include <bsd.port.mk>

3
lang/pocl/distinfo Normal file
View File

@ -0,0 +1,3 @@
TIMESTAMP = 1479738879
SHA256 (pocl-0.13.tar.gz) = a17f37d8f26819c0c8efc6de2b57f67a0c8a81514fc9cd5005434e49d67499f9
SIZE (pocl-0.13.tar.gz) = 1901208

View File

@ -0,0 +1,25 @@
First part: this is false, this was due to a libtool bug, which is fixed now
Second part: cmp --quiet is long for the -s option, use that since FreeBSD
cmp doesn't have the long option.
--- Makefile.in.orig 2016-09-13 22:57:13.327123000 +0200
+++ Makefile.in 2016-09-13 23:01:18.738696000 +0200
@@ -116,8 +116,7 @@
@POCL_ANDROID_FALSE@am__append_1 = scripts examples tests
#TODO: this naming scheme is used on other platforms (primarly BSDs?) too
-@BUILD_ICD_TRUE@@FREEBSD_HOST_OS_TRUE@am__append_2 = -e 's,so.VER,so.$(LIB_CURRENT_VERSION),g'
-@BUILD_ICD_TRUE@@FREEBSD_HOST_OS_FALSE@am__append_3 = -e 's,so.VER,so.$(LIB_FIRST_VERSION).$(LIB_AGE_VERSION).$(LIB_REVISION_VERSION),g'
+@BUILD_ICD_TRUE@am__append_3 = -e 's,so.VER,so.$(LIB_FIRST_VERSION).$(LIB_AGE_VERSION).$(LIB_REVISION_VERSION),g'
@BUILD_ICD_TRUE@am__append_4 = pocl.icd
@BUILD_ICD_TRUE@am__append_5 = pocl.icd
subdir = .
@@ -1076,7 +1075,7 @@
echo "#define PKGDATADIR \"${pkgdatadir}\"" > $@.new
echo "#define PKGLIBEXECDIR \"${pkglibexecdir}\"" >> $@.new
echo "#define PKGINCLUDEDIR \"${pkgincludedir}\"" >> $@.new
- @if cmp --quiet $@.new $@ ; then \
+ @if cmp -s $@.new $@ ; then \
: "Paths not changed" ;\
$(RM) $@.new ;\
else \

View File

@ -0,0 +1,90 @@
--- lib/CL/devices/cpuinfo.c.orig 2016-11-20 11:31:19.521203000 +0100
+++ lib/CL/devices/cpuinfo.c 2016-11-20 11:29:24.502817000 +0100
@@ -31,9 +31,13 @@
# include "vccompat.hpp"
#endif
+#include <sys/types.h>
+#include <sys/sysctl.h>
+
#include "config.h"
#include "cpuinfo.h"
+#if 0
const char* cpuinfo = "/proc/cpuinfo";
#define MAX_CPUINFO_SIZE 64*1024
//#define DEBUG_POCL_CPUINFO
@@ -152,8 +156,29 @@ pocl_cpuinfo_detect_max_clock_frequency(
}
return -1;
}
+#endif
+
+/**
+ * Detects the number of parallel hardware threads supported by
+ * the CPU.
+ *
+ * @return The number of hardware threads.
+ */
+ int
+pocl_cpuinfo_detect_compute_unit_count()
+{
+ int mib[2], nocpus;
+ size_t len;
+ mib[0] = CTL_HW;
+ mib[1] = HW_NCPU;
+ len = sizeof(nocpus);
+ sysctl(mib, 2, &nocpus, &len, NULL, 0);
+ return nocpus;
+}
+
+#if 0
/**
* Detects the number of parallel hardware threads supported by
* the CPU by parsing the cpuinfo.
@@ -231,6 +256,27 @@ pocl_cpuinfo_detect_compute_unit_count()
}
return -1;
}
+#endif
+
+/**
+ * Detects the maximum clock frequency of the CPU.
+ *
+ * Assumes all cores have the same max clock freq.
+ *
+ * @return The clock frequency in MHz.
+ */
+int
+pocl_cpuinfo_detect_max_clock_frequency()
+{
+ //XXX PLEASE NOTE, THIS IS NOT TOO PORTABLE (AND/OR ACCURATE)!
+ const char mib[] = "hw.clockrate";
+ size_t size = sizeof(int);
+ int clockrate;
+
+ sysctlbyname(mib, (void *)&clockrate, &size, NULL, 0);
+
+ return clockrate;
+ }
#ifdef POCL_ANDROID
@@ -269,6 +315,7 @@ pocl_cpuinfo_get_cpu_name_and_vendor(cl_
* short_name is in the .data anyways.*/
device->long_name = device->short_name;
+#if 0
/* default vendor and vendor_id, in case it cannot be found by other means */
device->vendor = cpuvendor_default;
if (device->vendor_id == 0)
@@ -317,6 +364,7 @@ pocl_cpuinfo_get_cpu_name_and_vendor(cl_
char *new_name = (char*)malloc (len);
snprintf (new_name, len, "%s-%s", device->short_name, start);
device->long_name = new_name;
+#endif
}

View File

@ -0,0 +1,21 @@
dirty hack, pocl-standalone will be installed into stage with
r-xr-xr-x permissions. So writing to it is problemetic. give the file write
permission and take it away after.
Upstream (pre 0.14) will be using cmake so this hack is only temporary.
--- scripts/Makefile.in.orig 2016-09-13 22:10:48.091956000 +0200
+++ scripts/Makefile.in 2016-09-13 22:13:33.388168000 +0200
@@ -651,10 +651,11 @@
install-exec-hook: $(bin_SCRIPTS)
for f in $(bin_SCRIPTS) ; do \
+ chmod +w "$(DESTDIR)$(bindir)/$$f" ; \
sed -e '/^# BEGIN REMOVE ONCE INSTALLED$$/,/^# END REMOVE ONCE INSTALLED$$/d' \
> "$(DESTDIR)$(bindir)/$$f" \
< "$$f" && \
- chmod +x "$(DESTDIR)$(bindir)/$$f" ; \
+ chmod +x-w "$(DESTDIR)$(bindir)/$$f" ; \
done
# Tell versions [3.59,3.63) of GNU make to not export all variables.

22
lang/pocl/pkg-descr Normal file
View File

@ -0,0 +1,22 @@
Portable OpenCL (pocl)
----------------------
Portable OpenCL aims to be an efficient open source (MIT-licensed)
implementation of the OpenCL 1.2 standard.
In addition to producing an easily portable open source OpenCL
implementation, another major goal of the project is improving
performance portability of OpenCL programs with compiler
optimizations, reducing the need for target-dependent manual
optimizations. At the core of pocl is a set of LLVM passes
used to statically parallelize multiple work-items with the kernel
compiler, even in the presence of work-group barriers. This enables
parallelization of the fine-grained static concurrency in the work
groups in multiple ways (SIMD, VLIW, superscalar,...).
The code base is modularized to allow easy adding of new "device drivers"
in the host-device layer. A generic multithreaded "target driver" is
included. It allows running OpenCL applications on a host that supports
the pthread library with multithreading at the work group granularity.
WWW: http://portablecl.org/

12
lang/pocl/pkg-message Normal file
View File

@ -0,0 +1,12 @@
Deadlocks (freezes) on FreeBSD:
OpenCL applications using pocl on FreeBSD must be compiled with
options CFLAGS+=-pthread or CXXFLAGS+=-pthread, otherwise someone risk
that a library may not initialize the threading on BSD independently,
even if an ICD loader is used.
See:
http://www.freebsd.org/cgi/query-pr.cgi?pr=163512
(Source: http://portablecl.org/docs/html/faq.html?highlight=freebsd)

27
lang/pocl/pkg-plist Normal file
View File

@ -0,0 +1,27 @@
bin/pocl-standalone
etc/OpenCL/vendors/pocl.icd
include/poclu.h
lib/libpocl.a
lib/libpocl.la
lib/libpocl.so
lib/libpocl.so.1
lib/libpocl.so.1.6.0
lib/libpoclu.a
lib/libpoclu.la
lib/libpoclu.so
lib/libpoclu.so.1
lib/libpoclu.so.1.6.0
lib/pocl/llvmopencl.a
lib/pocl/llvmopencl.la
lib/pocl/llvmopencl.so
lib/pocl/llvmopencl.so.7
lib/pocl/llvmopencl.so.7.0.0
libdata/pkgconfig/pocl.pc
%%DATADIR%%/include/_kernel.h
%%DATADIR%%/include/_kernel_c.h
%%DATADIR%%/include/_kernel_constants.h
%%DATADIR%%/include/pocl.h
%%DATADIR%%/include/pocl_device.h
%%DATADIR%%/include/pocl_tests.h
%%DATADIR%%/include/pocl_types.h
%%DATADIR%%/kernel-amd64-portbld-freebsd%%OSREL%%.bc