r5 | power Conveyal 's web-based interface | Web Services library
kandi X-RAY | r5 Summary
kandi X-RAY | r5 Summary
Developed to power a web-based interface for scenario planning and land-use/transport accessibility analysis, R5 is Conveyal's routing engine for multimodal (transit/bike/walk/car) networks with a particular focus on public transit
Support
Quality
Security
License
Reuse
Top functions reviewed by kandi - BETA
- Calculates the fare bounds for the given state
- Initialize the fare overrides for a given route
- Initialise the fare overrides for the traffic of the traffic layer
- Initialize the fare overrides for the traffic in the vehicle
- Create a Bundle of GTF handles
- Returns the work product type for the given model
- Writes the given bundle config to disk
- Creates a ProgressInputStream for an uploaded file item
- Creates an opportunity dataset
- Adjusts the trip pattern if any
- Calculates the fare based on the current state
- Combine the results of multiple street searches using the given parameters
- Computes the accessTimes and the accessTimes from the route request
- Finds the polygon feature from the network
- Configure the spark service
- Rewrite a trip schedule
- Processes a pattern and returns a copy of the traffic pattern
- Writes this node to the specified sink
- Associates PointSet with a list of Point vertices
- This is the main entry point for reading from the input file
- Handles a single - point request
- Main entry point
- Calculates the fare based on the incoming state
- Creates a new regional analysis object
- Extract the median of a region
- Get the plan for a profile
r5 Key Features
r5 Examples and Code Snippets
Community Discussions
Trending Discussions on r5
QUESTION
I'm trying to make sure gcc vectorizes my loops. It turns out, that by using -march=znver1
(or -march=native
) gcc skips some loops even though they can be vectorized. Why does this happen?
In this code, the second loop, which multiplies each element by a scalar is not vectorised:
...ANSWER
Answered 2022-Apr-10 at 02:47The default -mtune=generic
has -mprefer-vector-width=256
, and -mavx2
doesn't change that.
znver1 implies -mprefer-vector-width=128
, because that's all the native width of the HW. An instruction using 32-byte YMM vectors decodes to at least 2 uops, more if it's a lane-crossing shuffle. For simple vertical SIMD like this, 32-byte vectors would be ok; the pipeline handles 2-uop instructions efficiently. (And I think is 6 uops wide but only 5 instructions wide, so max front-end throughput isn't available using only 1-uop instructions). But when vectorization would require shuffling, e.g. with arrays of different element widths, GCC code-gen can get messier with 256-bit or wider.
And vmovdqa ymm0, ymm1
mov-elimination only works on the low 128-bit half on Zen1. Also, normally using 256-bit vectors would imply one should use vzeroupper
afterwards, to avoid performance problems on other CPUs (but not Zen1).
I don't know how Zen1 handles misaligned 32-byte loads/stores where each 16-byte half is aligned but in separate cache lines. If that performs well, GCC might want to consider increasing the znver1 -mprefer-vector-width
to 256. But wider vectors means more cleanup code if the size isn't known to be a multiple of the vector width.
Ideally GCC would be able to detect easy cases like this and use 256-bit vectors there. (Pure vertical, no mixing of element widths, constant size that's am multiple of 32 bytes.) At least on CPUs where that's fine: znver1, but not bdver2 for example where 256-bit stores are always slow due to a CPU design bug.
You can see the result of this choice in the way it vectorizes your first loop, the memset-like loop, with a vmovdqu [rdx], xmm0
. https://godbolt.org/z/E5Tq7Gfzc
So given that GCC has decided to only use 128-bit vectors, which can only hold two uint64_t
elements, it (rightly or wrongly) decides it wouldn't be worth using vpsllq
/ vpaddd
to implement qword *5
as (v<<2) + v
, vs. doing it with integer in one LEA instruction.
Almost certainly wrongly in this case, since it still requires a separate load and store for every element or pair of elements. (And loop overhead since GCC's default is not to unroll except with PGO, -fprofile-use
. SIMD is like loop unrolling, especially on a CPU that handles 256-bit vectors as 2 separate uops.)
I'm not sure exactly what GCC means by "not vectorized: unsupported data-type". x86 doesn't have a SIMD uint64_t
multiply instruction until AVX-512, so perhaps GCC assigns it a cost based on the general case of having to emulate it with multiple 32x32 => 64-bit pmuludq
instructions and a bunch of shuffles. And it's only after it gets over that hump that it realizes that it's actually quite cheap for a constant like 5
with only 2 set bits?
That would explain GCC's decision-making process here, but I'm not sure it's exactly the right explanation. Still, these kinds of factors are what happen in a complex piece of machinery like a compiler. A skilled human can easily make smarter choices, but compilers just do sequences of optimization passes that don't always consider the big picture and all the details at the same time.
-mprefer-vector-width=256
doesn't help:
Not vectorizing uint64_t *= 5
seems to be a GCC9 regression
(The benchmarks in the question confirm that an actual Zen1 CPU gets a nearly 2x speedup, as expected from doing 2x uint64 in 6 uops vs. 1x in 5 uops with scalar. Or 4x uint64_t in 10 uops with 256-bit vectors, including two 128-bit stores which will be the throughput bottleneck along with the front-end.)
Even with -march=znver1 -O3 -mprefer-vector-width=256
, we don't get the *= 5
loop vectorized with GCC9, 10, or 11, or current trunk. As you say, we do with -march=znver2
. https://godbolt.org/z/dMTh7Wxcq
We do get vectorization with those options for uint32_t
(even leaving the vector width at 128-bit). Scalar would cost 4 operations per vector uop (not instruction), regardless of 128 or 256-bit vectorization on Zen1, so this doesn't tell us whether *=
is what makes the cost-model decide not to vectorize, or just the 2 vs. 4 elements per 128-bit internal uop.
With uint64_t
, changing to arr[i] += arr[i]<<2;
still doesn't vectorize, but arr[i] <<= 1;
does. (https://godbolt.org/z/6PMn93Y5G). Even arr[i] <<= 2;
and arr[i] += 123
in the same loop vectorize, to the same instructions that GCC thinks aren't worth it for vectorizing *= 5
, just different operands, constant instead of the original vector again. (Scalar could still use one LEA). So clearly the cost-model isn't looking as far as final x86 asm machine instructions, but I don't know why arr[i] += arr[i]
would be considered more expensive than arr[i] <<= 1;
which is exactly the same thing.
GCC8 does vectorize your loop, even with 128-bit vector width: https://godbolt.org/z/5o6qjc7f6
QUESTION
I am observing strange behaviour when using Javascript to hide portions of an HTML table, and it varies depending on which browser I use. I have made the HTML accessible on this site
https://auditrecordit.com/SO_demo/MSc.html
and also include it below, but I thought the website was handy for seeing the behaviour for yourself very quickly.
As you can see, the page shows a degree structure. If I select the "Certificate" toggle in Firefox, I get the expected behaviour - Semester Two disappears, and so does the middle module of Semester One (and the choice for the bottom row of Semester One extends).
Again in Firefox, if I then select the "MSc" toggle, I get the expected reverse behaviour - the hidden table elements reappear.
However, if I select the "Diploma" toggle, the text in the unapplicable table elements disappears (good), but their background colour doesn't (bad).
Now here's the super-weird bit - if I then swap browser tabs and back again (or switch apps and back again), the background colour gets fixed i.e. it goes away!
In fact, I don't even need to leave the window. If I open the Web Developer console, I only have take my mouse pointer outside of the display portion of the window (even just to hover over a scroll bar) and the background colour disappears.
So I guess there is some event occuring when I do this which prompts Firefox to have some kind of mini-refresh.
With that in mind, I tried adding
...ANSWER
Answered 2022-Mar-18 at 10:24This is really funky behavior.
I believe this is related to the fact, that in the javascript you are setting table row visibility and table cell
visibility so that there are mismatches. The previous state of the row and cell seem to affect how css classes are rendered.
I created a simple example below, where this is demonstrated. The randomize button will set row and cell visibilities to visible
or collapse
50% of the time. At least with Chrome (99.0.4844.74) after few clicks you get cells that have no content but background color visible and also some cells with content visible but no background color.
I could not find any solid logic what is determining the cell's behavior.
QUESTION
I need help. Im new on coding, so I've developed a game with pygame. It's a game where you fight as a robot against a zombie. If a fireball collides with the zombie, the heart picture will be updated from filled to half and so on.
The Tech-Lead said that this code is not efficient because of the many if statements in the def hearts() method in the Enemy class.
Could you please help me to shorten it? I have absolutely 0 idea what I could do. Thinking about loops, but dont know how to do it. Please help me
Here is my code:
...ANSWER
Answered 2022-Mar-11 at 00:50The tech-lead is wrong: your code is perfectly efficient the way it is written. Making the code shorter does not make it faster or more "elegant".
However, shorter code can be easier to maintain and change. Your code is fine as long as the number of heart containers is always exactly 12. But if you want to change that (to increase/decrease the difficultly of the game, or let the player get new heart containers) then this code won't work. It is hard-coded to work with exactly 12 heart containers only.
To change this, put this repetitive code in a loop. You'll need to look at the pattern of how the numbers change and create a small math formula for it. I've come up with the following. (I've also added constants instead of the integer literals, so that the code is easier to read and change.)
QUESTION
I was using pyspark on AWS EMR (4 r5.xlarge as 4 workers, each has one executor and 4 cores), and I got AttributeError: Can't get attribute 'new_block' on . Below is a snippet of the code that threw this error:
...
ANSWER
Answered 2021-Aug-26 at 14:53I had the same error using pandas 1.3.2 in the server while 1.2 in my client. Downgrading pandas to 1.2 solved the problem.
QUESTION
I'm building a mutex primitive using gcc inline assembly for a CortexM7 target using the LDREX and STREX instructions, following the Barrier Litmus Tests and Cookbook document from ARM.
Code ...ANSWER
Answered 2022-Feb-15 at 11:20Per @jester's help, I realized I had the wrong constraint on the GCC-inline variable alias for the lock. It should have been "+m", specifying a memory address instead of a register.
I was also de-referencing the address of the lock when I should have been leaving it as a pointer.
I changed [lock] "+l"(*lock)
to [lock] "+m"(lock)
and it now builds.
QUESTION
I have been hanging around with this problem for some time now and I can't solve it.
I'm launching an EC2 instance that runs a bash script and installs a few things. At the same time, I am also launching an RDS instance, but I need to be able to pass the value from the RDS endpoint to the EC2 instance to configure the connection.
I'm trying to do this using templatefile, like this
...ANSWER
Answered 2021-Dec-07 at 13:47The variable is not a shell variable but a templated variable — so terraform will parse the file, regardless of its type and replace terraform variables in the said file.
Knowing this, $rds
is not a terraform variable interpolation, while ${rds}
is.
So, your bash script should rather be:
QUESTION
I am trying to build image for linux/arm64/v8
on linux/amd64
Gitlab runner. I run it with this command:
ANSWER
Answered 2021-Nov-16 at 11:01There were three problems with my approach:
- I needed to install buildx extension
QUESTION
We want to use Paketo.io / CloudNativeBuildpacks (CNB) GitLab CI in the most simple way. Our GitLab setup uses an AWS EKS cluster with unprivileged GitLab CI Runners leveraging the Kubernetes executor. We also don't want to introduce security risks by using Docker in our builds. So we don't have our host’s /var/run/docker.sock
exposed nor want to use docker:dind
.
We found some guides on how to use Paketo with GitLab CI like this https://tanzu.vmware.com/developer/guides/gitlab-ci-cd-cnb/ . But as described beneath the headline Use Cloud Native Buildpacks with GitLab in GitLab Build Job WITHOUT Using the GitLab Build Template
, the approach relies on Docker and pack CLI. We tried to resemble this in our .gitlab-ci.yml
which looks like this:
ANSWER
Answered 2021-Nov-15 at 14:04Use the Buildpack's lifecycle directly inside your .gitlab-ci.yml
here's a fully working example):
QUESTION
I have following matrix:
...ANSWER
Answered 2021-Nov-07 at 19:29We may use paste
in a vectorized way by rep
licating the column names with col
index and then get the unique
after paste
ing with the values of the n.mat
(it is a data.frame
after as.data.frame
- so we used unlist
)
QUESTION
I am trying to use Address Sanitizer, but the kernel keeps killing my process due to excessive memory usage. Without Address Sanitizer the process runs just fine.
The program is compiled for arm-v7a using gcc-8.2.1 with
...ANSWER
Answered 2021-Oct-14 at 09:45You could reduce some Asan features (or enable them one by one in separate runs):
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install r5
You can use r5 like any standard Java library. Please include the the jar files in your classpath. You can also use any IDE and you can run and debug the r5 component as you would do with any other Java program. Best practice is to use a build tool that supports dependency management such as Maven or Gradle. For Maven installation, please refer maven.apache.org. For Gradle installation, please refer gradle.org .
Support
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page