Cmake giving error “compute_20”, even though the architecture is explicitly unstated in the make file

I have the same error as the person in this question, however, when I tried the solution (Just delete the target for compute_20), I’m still getting the error, even after cleaning the project.

To be specific: I’m trying to install caffe by following these instructions, step by step. Even more specifically, here is my steps.

I run sudo cmake .., and I get the following information:

CMake Warning (dev) at cmake/Misc.cmake:32 (set):   implicitly converting 'BOOLEAN' to 'STRING' type. Call Stack (most recent call first):   CMakeLists.txt:24 (include) This warning is for project developers.  Use -Wno-dev to suppress it.  -- Found Boost: /usr/include (found suitable version "1.65.1", minimum required is "1.46") found components:  system thread filesystem chrono date_time atomic  -- Found gflags  (include: /usr/include, library: /usr/lib/x86_64-linux-gnu/libgflags.so) -- Found glog    (include: /usr/include, library: /usr/lib/x86_64-linux-gnu/libglog.so) -- Found PROTOBUF Compiler: /usr/bin/protoc -- HDF5: Using hdf5 compiler wrapper to determine C configuration -- HDF5: Using hdf5 compiler wrapper to determine CXX configuration -- Found lmdb    (include: /usr/include, library: /usr/lib/x86_64-linux-gnu/liblmdb.so) -- Found LevelDB (include: /usr/include, library: /usr/lib/x86_64-linux-gnu/libleveldb.so) -- Found Snappy  (include: /usr/include, library: /usr/lib/x86_64-linux-gnu/libsnappy.so) -- CUDA detected: 10.1 -- Automatic GPU detection failed. Building for all known architectures. -- Added CUDA NVCC flags for: sm_20 sm_21 sm_30 sm_35 sm_50 -- OpenCV found (/usr/share/OpenCV) -- Found OpenBLAS libraries: /usr/lib/x86_64-linux-gnu/libopenblas.so -- Found OpenBLAS include: /usr/include/x86_64-linux-gnu -- NumPy ver. 1.11.0 found (include: /usr/local/lib/python2.7/dist-packages/numpy/core/include) -- Found Boost: /usr/include (found suitable version "1.65.1", minimum required is "1.46") found components:  python  -- Found NCCL (include: /usr/include, library: /usr/lib/x86_64-linux-gnu/libnccl.so) -- Detected Doxygen OUTPUT_DIRECTORY: ./doxygen/ --  -- ******************* Caffe Configuration Summary ******************* -- General: --   Version           :   0.15.14 --   Git               :   v0.15.14-16-g4b8d54d8-dirty --   System            :   Linux --   C++ compiler      :   /usr/bin/c++ --   Release CXX flags :   -O3 -DNDEBUG -fPIC -Wall -Wno-sign-compare -Wno-uninitialized --   Debug CXX flags   :   -g -fPIC -Wall -Wno-sign-compare -Wno-uninitialized --   Build type        :   Release --  --   BUILD_SHARED_LIBS :   ON --   BUILD_python      :   ON --   BUILD_matlab      :   OFF --   BUILD_docs        :   ON --   CPU_ONLY          :   OFF --   USE_OPENCV        :   ON --   USE_LEVELDB       :   ON --   USE_LMDB          :   ON --   ALLOW_LMDB_NOLOCK :   OFF --  -- Dependencies: --   BLAS              :   Yes (open) --   Boost             :   Yes (ver. 1.65) --   glog              :   Yes --   gflags            :   Yes --   protobuf          :   Yes (ver. 3.0.0) --   lmdb              :   Yes (ver. 0.9.21) --   LevelDB           :   Yes (ver. 1.20) --   Snappy            :   Yes (ver. ..) --   OpenCV            :   Yes (ver. 3.2.0) --   CUDA              :   Yes (ver. 10.1) --  -- NVIDIA CUDA: --   Target GPU(s)     :   Auto --   GPU arch(s)       :   sm_20 sm_21 sm_30 sm_35 sm_50 --   cuDNN             :   Not found --   NCCL              :   Yes --  -- Python: --   Interpreter       :   /usr/bin/python2.7 (ver. 2.7.15) --   Libraries         :   /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.15+) --   NumPy             :   /usr/local/lib/python2.7/dist-packages/numpy/core/include (ver 1.11.0) --  -- Documentaion: --   Doxygen           :   /usr/bin/doxygen (1.8.13) --   config_file       :   /home/par/caffe/.Doxyfile --  -- Install: --   Install path      :   /home/par/caffe/build/install --  -- Configuring done -- Generating done -- Build files have been written to: /home/par/caffe/build 

NOTE: The configuration says specifically that it’s compiling to sm_20 compute version, which is not what I want to do. I searched all files that I have for this “sm_20” token, and the results are all in /caffe/build/src/caffe/CMakeFiles/cuda_compile_1.dir/, meaning that they are not contained within a make file.

I searched the same files for a compute_20 mention, and once again, the only mentions are in the directory above. I remove them, keeping syntax in check, and then run make -j"$ (nproc)" to which I get the following error:

[  6%] Building NVCC (Device) object src/caffe/CMakeFiles/cuda_compile_1.dir/layers/cuda_compile_1_generated_crop_layer.cu.o nvcc fatal   : Unsupported gpu architecture 'compute_20' CMake Error at cuda_compile_1_generated_math_functions.cu.o.Release.cmake:219 (message):   Error generating   /home/par/caffe/build/src/caffe/CMakeFiles/cuda_compile_1.dir/util/./cuda_compile_1_generated_math_functions.cu.o 

What is the cause of this, if compute_20 nor sm_20 are mentioned in any makefile?

Should we save clean architecture entities in DB?

I’m a little confused about how to store the entities in DB. According to Uncle Bob, entities encapsulate Enterprise wide business rules. This mean that they can has methods for example.

But it’s correct pass my entity as a parameter to the GatewayInterface / Repository?

I’m been reading some comments here, and some of them tell that is not recommend pass entities to outer layers. Because you are passing Enterprise business logic.

Should I pass a DTO to my Repository only? Something that the repository can map and then save.

Thanks

How would one change this architecture to avoid synchronous REST calls?

right now I have an architecture where several “microservices” are daisy-chained together in a row via synchronous REST called. Obviously this is far from ideal since synchronous communication between microservices is strongly discouraged and, as mentioned on slide 37 here, the overall availability of your application drops exponentially with how many services you have chained together behind it.

Picture a flow somewhat like this:

From the front-end, the user submits an application form. This starts a process for either accepting or denying the application.

first service1 is called, which inserts the form data into a database

once the insertion is complete service1 calls service2 which does some preliminary sanity checks

if those checks pass then service2 will proceed to call service3 to perform some more advanced checks.

service3 will in turn call serviceA, serviceB, and serviceC in parallel, and aggregate their responses into a final decision.

Some challenges are:

  • service3 has to come after we know the results of service2‘s checks. This is because service3‘s checks are more expensive to do so if the sanity checks already fail, we don’t want to bother calling service3 at all.
  • The calls to serviceA, serviceB, and serviceC, should technically be considered “query” calls(under CQS/CQRS) since we are expecting a return value and there is no change in state. However, some or all of these services are in fact complex machine learning models. This differentiates them from regular query calls in 2 ways: 1. they can be slower than what you would usually expect from a “query” call, and 2. we don’t have the option of retaining a local copy of the data using service3‘s DB since said data is generated on the fly.
  • It is a requirement that we have an answer(to accept or deny the application) in real time: a few seconds after the customer clicks submit they should know whether we accepted them or not. At the same time, the financial impact of making the wrong decision, even for a short time is too high to risk so giving some answer and then correcting it later(eventual consistency) is not an option here.

Any ideas on how I could reorganize an architecture like this? Or do the requirements in this case mean we have to live with the issues of coupling?

Thanks.

How is a better way to build software architecture for multi-domain based API

I have one endpoint for my API – apiserver.com

And on the client-side could be different domains, like site1.com, site2.com, site3.com and so on.

Every specific client domain can have specific settings. Depending on the specific domain of the client-side (site1.com, site2.com, site3.com) my apiserver.com can return different responses. For example, if you send request from site1.com to apiserver.com, you can GET from apiserver.com/products/all just products which related to this domain.

Therefore, I should send somehow domain name with every request. I wanna use special Header in HTTP requests, like my-domain-header: site1.com But in my opinion, it is not safely and not reliable

What is the better way to pass the domain name to my apiserver.com?

Does the Hack computer from “The Elements of Computing Systems” use Von Neumann architecture?

I’m reading “The Elements of Computing Systems” (subtitled “Building a Modern Computer from First Principles – Nand to Tetris Companion) by Noam Nisan and Shimon Schocken.

Chapter 4 is about machine language, and more specifically the machine language used on their computer platform called Hack. Section 4.2.1 says this about Hack:

The Hack computer is a von Neumann platform. It is a 16-bit machine, consisting of a CPU, two separate memory modules serving as instruction memory and data memory, and two memory-mapped I/O devices: a screen and a keyboard.

The CPU can only execute programs that reside in the instruction memory. The instruction memory is a read-only device, and programs are loaded into it using some exogenous means.

With that distinction between instruction memory and data memory, is it really a von Neumann architecture? According to my understanding of the difference between von Neumann and Harvard, that description sounds much more like a Harvard architecture.

Architecture strategies for a complex competition scoring system

Competition description:

  • There are about 10 teams competing against each other over a 6-week period.
  • Each team’s total score (out of a 1000 total available points) is based on the total of its scores in about 25,000 different scoring elements.
  • Most scoring elements are worth a small fraction of a point and there will about 10 X 25,000 = 250,000 total raw input data points.
  • The points for some scoring elements are awarded at frequent regular time intervals during the competition. The points for other scoring elements are awarded at either irregular time intervals or at just one moment in time.
  • There are about 20 different types of scoring elements.
  • Each of the 20 types of scoring elements has a different set of inputs, a different algorithm for calculating the earned score from the raw inputs, and a different number of total available points. The simplest algorithms require one input and one simple calculation. The most complex algorithms consist of hundreds or thousands of raw inputs and a more complicated calculation.
  • Some types of raw inputs are automatically generated. Other types of raw inputs are manually entered. All raw inputs are subject to possible manual retroactive adjustments by competition officials.

Primary requirements:

  • The scoring system UI for competitors and other competition followers will show current and historical total team scores, team standings, team scores by scoring element, raw input data (at several levels of aggregation, e.g. daily, weekly, etc.), and other metrics.
  • There will be charts, tables, and other widgets for displaying historical raw data inputs and scores.
  • There will be a quasi-real-time dashboard that will show current scores and raw data inputs.
  • Aggregate scores should be updated/refreshed whenever new raw data inputs arrive or existing raw data inputs are adjusted.
  • There will be a “scorekeeper UI” for manually entering new inputs, manually adjusting existing inputs, and manually adjusting calculated scores.

Decisions:

  • Should the scoring calculations be performed on the database layer (T-SQL/SQL Server, in my case) or on the application layer (C#/ASP.NET MVC, in my case)?
  • What are some recommended approaches for calculating updated total team scores whenever new raw inputs arrives? Calculating each of the teams’ total scores from scratch every time a new input arrives will probably slow the system to a crawl. I’ve considered some kind of “diff” approach, but that approach may pose problems for ad-hoc queries and some aggegates. I’m trying draw some sports analogies, but it’s tough because most games consist of no more than 20 or 30 scoring elements per game (I’m thinking of a high-scoring baseball game; football and soccer have fewer scoring events per game). Perhaps a financial balance sheet analogy makes more sense because financial “bottom line” calcs may be calculated from 250,000 or more transactions.
  • Should I be making heavy use of caching for this application?
  • Are there any obvious approaches or similar case studies that I may be overlooking?

Question about Linux kernel and ARM architecture

I am second-year CS student, I know C, OOP concepts, x86 architecture, reverse engineering basics, TCP/IP stack and OS concepts, also I love Linux OS. I have just one question: Is it a mandatory to learn in depth a Linux kernel and develop some low-level stuff like kernel drivers before I dive into a binary exploitation in ARM (I’m not a total newbie, I’ve developed some very basic exploits for x86 arch, but I want to build a carrier in ARM exploitation)? I want to enter the security field ASAP and I don’t want to waste a lot of time. P.S.: I know, that I will need to learn Linux kernel somewhen, and it’s cool, but the most important question is – can I learn it AFTER the ARM binary exploitation and get my first job when I’m really good at binary exploitation without knowing a Linux kernel in REAL depth

Sharepoint 2013 – Three-Tier architecture

Recently, I’ve recieved a request to change SharePoint archeticture to be Three-Tier archeticture, as SharePoint by default requires database connection on Front-End server which leads to 2-tier architecture.

Let’s assume I have 2 web front end servers, 1 application server, and 1 DB server, and I intend to do the following:

1- Move the SharePoint Configuration DB to another DB server, let’s assume the name is DB-Server-A

2- The content DB of the web application will be on a DB server named DB-Server-B

3- The connection between the web front end servers and DB-Server-B will not be opened through any ports due to security policies, instead the connection will be opened between WFEs and DB-Server-A where the configuration DB is located.

My question: If a web application has a content DB on DB-Server-B and there’s no connection opened through any ports between the front end and DB-Server-B, will the site keep working without issues? as per my understadning “the web front end server directs any request to the application server, which returns the results to the front-end web server”

https://docs.microsoft.com/en-us/sharepoint/install/add-web-or-application-server-to-the-farm

Thank you.

Heroku request timeout vs Nodejs architecture

At this link (https://blog.heroku.com/timeout-quickly#how-webservers-work), I read:

All webservers will work in a similar way. Any new request will go to a queue, and the server will process them one after the other.

This means if you have 30 requests in your queue, each taking 1 second to be processed, that will take 30 seconds for your server to empty the queue. If one of those requests is a file upload for example and takes 5 minutes to be processed, it means that any other request will be stuck for 5 minutes. That’s 5 minutes during which no one else can visit your app.

This reasoning is used to justify having a 30 second timeout for every request on Heroku-hosted web servers (https://devcenter.heroku.com/articles/error-codes#h12-request-timeout).

However, is the above really true for Node, which is supposed to be async? Is there any real justification for having such a timeout for a Node server running on Heroku?

What architecture layer does GraphQL is part of?

I’m currently dealing with a GraphQL project with poor architecture. I read about where to put AuthZ checks and they refer to the “business layer” as to be called from a GraphQL resolver.

Up till now, I thought GraphQL belong in the Data Access Layer (or at least, JUST BEFORE the DAL), but it now looks like it belongs in the most outside layer, similar to a “controller”.

What layer does it belongs to?