Developer Guide

  • 2022.3
  • 10/25/2022
  • Public Content
Contents

Intel® oneAPI Base Toolkit Sample Application

This tutorial tells you how to use the DPC++ compiler, convert CUDA to DPC++, build it, and run it in a Docker* container.

Run the Sample Application

  1. Check if your installation has the eiforamr-full-flavour-sdk Docker* image.
    docker images |grep eiforamr-full-flavour-sdk #if you have it installed, the result is: eiforamr-full-flavour-sdk
    If the image is not installed, continuing with these steps
    triggers a build that takes longer than an hour
    (sometimes, a lot longer depending on the system resources and internet connection).
  2. If the image is not installed, Intel recommends installing the Robot Complete Kit with the Get Started Guide for Robots.
  3. Go to the
    AMR_containers
    folder:
    cd <edge_insights_for_amr_path>/Edge_Insights_for_Autonomous_Mobile_Robots_<version>/AMR_containers
  4. Prepare the environment setup:
    source ./01_docker_sdk_env/docker_compose/common/docker_compose.source
  5. Run the command below to start the Docker* container as root:
    CHOOSE_USER=root docker-compose -f 01_docker_sdk_env/docker_compose/01_amr/amr-sdk.all.yml run full-sdk bash
    If a proxy is required to connect to the Internet, update
    /etc/apt/apt.conf.d/proxy.conf
    with the corresponding exports and execute the following export commands:
    echo 'Acquire::http::proxy "<http_proxy:port>";' | sudo tee -a /etc/apt/apt.conf.d/proxy.conf echo 'Acquire::https::proxy "<https_proxy:port>";' | sudo tee -a /etc/apt/apt.conf.d/proxy.conf export http_proxy="http://<http_proxy>:port" export https_proxy="http://<https_proxy>:port"
  6. Install CUDA (replace
    <http_proxy:port>
    with your proxy):
    # Send proxy exports echo "deb http://apt.pop-os.org/proprietary focal main" | sudo tee -a /etc/apt/sources.list.d/pop-proprietary.list sudo apt-key adv --keyserver-options http-proxy=<http_proxy:port> --keyserver keyserver.ubuntu.com --recv-key 204DD8AEC33A7AFF sudo -E apt-get update -y --allow-unauthenticated && DEBIAN_FRONTEND=noninteractive sudo -E apt-get install -y --no-install-recommends system76-cuda-10.1
  7. The install command may fail to check if CUDA was installed:
    ls /usr/lib/cuda*
    Example output:
    /usr/lib/cuda/: EULA.txt NsightSystems-2018.3 cublas_version.txt extras jre libnsight nsightee_plugins nvvm share targets version.txt NsightCompute-2019.1 bin doc include lib64 libnvvp nvml samples src tools /usr/lib/cuda-10.1/: EULA.txt NsightSystems-2018.3 cublas_version.txt extras jre libnsight nsightee_plugins nvvm share targets version.txt NsightCompute-2019.1 bin doc include lib64 libnvvp nvml samples src tools
  8. Set up the environment for Intel® oneAPI Base Toolkit:
    source /opt/intel/oneapi/setvars.sh
  9. Download a sample file that uses the DPC++ compiler:
    wget -L https://raw.githubusercontent.com/intel/llvm/98b6ee437ed325992ace95548b0ffc01dd4cbbe9/sycl/examples/simple-dpcpp-app.cpp -O simple.cpp # if the binary is not downloaded try setting the proxies first and try again: export http_proxy="http://<http_proxy>:port" export https_proxy="http://<https_proxy>:port"
    Run the command below and review the output binary:
    dpcpp simple.cpp -o simple ./simple
    Expected output:
    "The results are correct":
  10. Convert CUDA to DPC++ and build it.
    1. Go to CUDA code sample and convert to DPC++:
      git clone https://github.com/oneapi-src/oneAPI-samples.git cp oneAPI-samples/Tools/Migration/vector-add-dpct/src/vector_add.cu /home/eiforamr/data_samples/vector_add.cu chmod +x /home/eiforamr/data_samples/vector_add.cu dpct --in-root=/home/eiforamr/data_samples/ /home/eiforamr/data_samples/vector_add.cu
      Expected output:
      root@edgesoftware:/home/eiforamr/data_samples# chmod +x "${DATA_SAMPLES}"/vector_add.cu root@edgesoftware:/home/eiforamr/data_samples# dpct --in-root=/home/eiforamr/data_samples/ vector_add.cu NOTE: Could not auto-detect compilation database for file 'vector_add.cu' in '/home/eiforamr/data_samples' or any parent directory. The directory "dpct_output" is used as "out-root" Processing: /home/eiforamr/data_samples/vector_add.cu /home/eiforamr/data_samples/vector_add.cu:32:14: warning: DPCT1003:0: Migrated API does not return error code. (*, 0) is inserted. You may need to rewrite this code. status = cudaMemcpy(Result, d_C, VECTOR_SIZE*sizeof(float), cudaMemcpyDeviceToHost); ^ Processed 1 file(s) in -in-root folder "/home/eiforamr/data_samples" See Diagnostics Reference to resolve warnings and complete the migration: https://www.intel.com/content/www/us/en/develop/documentation/intel-dpcpp-compatibility-tool-user-guide/top/diagnostics-reference.html root@edgesoftware:/home/eiforamr/data_samples#
    2. Conversion successfully done:
      ls dpct_output vector_add.cu
    3. Go to output directory:
      cd /dpct_output
    4. Create a simple Makefile with this content:
      CXX = dpcpp TARGET = vector_add SRCS = vector_add.dp.cpp # Use predefined implicit rules and add one for *.cpp files. %.o: %.cpp $(CXX) -c $(CXXFLAGS) $(CPPFLAGS) $< -o $@ all: $(TARGET) $(TARGET): $(SRCS) $(DEPS) $(CXX) $(SRCS) -o $@ run: $(TARGET) ./$(TARGET) .PHONY: clean clean: rm -f $(TARGET) *.o
    5. Run make and then the output binary named
      vector_add
      :
      make ./vector_add
    Expected output:
    A block of even numbers are listed, indicating the result of adding two vectors: [ 1..N] + [1..N].
    ./vector_add 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 102 104 106 108 110 112 114 116 118 120 122 124 126 128 130 132 134 136 138 140 142 144 146 148 150 152 154 156 158 160 162 164 166 168 170 172 174 176 178 180 182 184 186 188 190 192 194 196 198 200 202 204 206 208 210 212 214 216 218 220 222 224 226 228 230 232 234 236 238 240 242 244 246 248 250 252 254 256 258 260 262 264 266 268 270 272 274 276 278 280 282 284 286 288 290 292 294 296 298 300 302 304 306 308 310 312 314 316 318 320 322 324 326 328 330 332 334 336 338 340 342 344 346 348 350 352 354 356 358 360 362 364 366 368 370 372 374 376 378 380 382 384 386 388 390 392 394 396 398 400 402 404 406 408 410 412 414 416 418 420 422 424 426 428 430 432 434 436 438 440 442 444 446 448 450 452 454 456 458 460 462 464 466 468 470 472 474 476 478 480 482 484 486 488 490 492 494 496 498 500 502 504 506 508 510 512

Troubleshooting

The Makefile from step 9.d contains tabs and may not copy well to your system, giving this error:
Makefile:8: *** missing separator. Stop.
To fix this, make sure there are tabs in lines 8, 15, 19, and 24.
For general robot issues, go to: Troubleshooting for Robot Tutorials.

Product and Performance Information

1

Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex.